package com.hsp.udp;

import java.io.IOException;
import java.net.*;

/**
 * @Author Stringzhua
 * @Date 2024/4/10 16:25
 * description:发送端B==>也可以接收数据
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket对象,准备在9998端口接收数据
        DatagramSocket socket = new DatagramSocket(9998);
        //2.将需要发送的数据,封装到DatagramPacket对象
        byte[] data = "hello,明天吃火锅~".getBytes();
//        new DatagramPacket(data,data.length,主机,接收端);
//        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 9999);
        //说明：封装的DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口
        DatagramPacket packet =
                new DatagramPacket(data, data.length, InetAddress.getByName("192.168.36.1"), 9999);
        socket.send(packet);

        //===接收从A端回复的信息
        //构建一个DatagramPacket对象，准备接收数据
        //在前面讲解UDP协议时，老师说过一个数据包最大是64k
        byte[] buf = new byte[64 * 1024];
        packet = new DatagramPacket(buf, buf.length);
        //调用  接收方法,将通过网络传输的DatagramPacket对象
        //填充到packet对象
        //提示:当有数据包发送到本机的9999端口时,就会接收到数据
        //如果没有数据包发送到本机的9999端口时,就会阻塞等待
        socket.receive(packet);

        //可以把packet 进行拆包,取出数据并显示
        int length = packet.getLength();//实际接收到的数据字节长度
        data = packet.getData();//接收到的数据

        String s = new String(data, 0, length);
        System.out.println(s);

        //3.关闭资源
        socket.close();
        System.out.println("B端退出");
    }
}
